package com.baoyouqun.API.IM;

import com.alibaba.fastjson2.JSONObject;
import com.baoyouqun.API.IM.entity.FriendStatus;
import com.baoyouqun.entity.WechatPushRecord;

import java.util.List;
import java.util.Map;
import java.util.Set;

public interface TencentImService {
    // 获取在线用户ID
    Set<String> getOnlineUserIds();

    // 初始化IM用户（创建用户）
    JSONObject initImUser(String userId, String nick, String faceUrl);

    // 发送系统消息
    JSONObject sendSystemMessage(String fromUserId, String toUserId, String content);

    // 验证回调签名
    boolean verifyCallbackSignature(String signature, String nonce, String timestamp, String body);

    /**
     * 批量校验好友关系
     *
     * @param identifier    当前用户ID（调用者）
     * @param userSig       当前用户的IM签名（从User表的imUserSig获取）
     * @param friendUserIds 待校验的好友ID列表
     * @return 好友关系状态列表
     */
    List<FriendStatus> batchCheckFriends(String identifier, String userSig, List<String> friendUserIds);

    /**
     * 批量推送：给多个用户发相同消息（如系统通知）
     *
     * @param senderImId      发送者IM账号
     * @param receiverUserIds 接收者系统用户ID列表
     * @param messageVO       消息内容
     */
    void sendBatchMessage(String senderImId, List<String> receiverUserIds, WechatPushRecord messageVO);

    // 新增方法

    /**
     * 添加好友
     *
     * @param fromUserId 发起添加的用户ID
     * @param toUserId   被添加的用户ID
     * @param remark     好友备注（可为空）
     * @return 接口响应结果
     */
    JSONObject addFriend(String fromUserId, String toUserId, String remark);

    /**
     * 删除好友
     *
     * @param fromUserId 发起删除的用户ID
     * @param toUserId   被删除的用户ID
     * @return 接口响应结果
     */
    JSONObject deleteFriend(String fromUserId, String toUserId);

    /**
     * 查询指定用户的在线状态
     *
     * @param userIds 待查询的用户ID列表
     * @return 键为用户ID，值为在线状态（Online/Offline等）
     */
    Map<String, String> getOnlineStatus(List<String> userIds);

    void syncUserHeadImg(String userId, String newHeadImgUrl);
}